/*
 * Copyright (c) 2024. hallele, Inc All rights reserved.
 */

package cn.hallele.infrastructure.util.bean;

import lombok.Getter;
import lombok.Setter;
import org.dromara.hutool.crypto.SecureUtil;
import org.dromara.hutool.crypto.asymmetric.KeyType;

import java.nio.charset.StandardCharsets;

/**
 * RSA加解密
 *
 * @author anle5
 * @since 2024/9/15 12:04
 */
@Getter
@Setter
public class RSA {
    private final org.dromara.hutool.crypto.asymmetric.RSA rsa;

    public RSA(String privateKey, String publicKey) {
        this.rsa = SecureUtil.rsa(privateKey, publicKey);
    }

    /**
     * 编码为Hex字符串
     *
     * @param plainText 被加密的明文
     * @return Hex字符串
     */
    public String encryptHex(String plainText) {
        return this.rsa.encryptHex(plainText.getBytes(StandardCharsets.UTF_8), KeyType.PublicKey);
    }

    /**
     * 加密
     *
     * @param plainText 被加密的明文
     * @return 加密后的bytes
     */
    public byte[] encrypt(String plainText) {
        return this.rsa.encrypt(plainText.getBytes(StandardCharsets.UTF_8), KeyType.PublicKey);
    }

    /**
     * 编码为Base64字符串
     *
     * @param plainText 被加密的明文
     * @return Base64字符串
     */
    public String encryptBase64(String plainText) {
        return this.rsa.encryptBase64(plainText.getBytes(StandardCharsets.UTF_8), KeyType.PublicKey);
    }

    /**
     * 解密为字符串，密文需为Hex（16进制）或Base64字符串
     *
     * @param encryptedText 数据，Hex（16进制）或Base64字符串
     * @return 解密后的密文
     */
    public String decryptHex(String encryptedText) {
        return this.rsa.decryptStr(encryptedText, KeyType.PrivateKey);
    }

    /**
     * 从Hex或Base64字符串解密，编码为UTF-8格式
     *
     * @param encryptedText 数据，Hex（16进制）或Base64字符串
     * @return 解密后的密文
     */
    public byte[] decrypt(String encryptedText) {
        return this.rsa.decrypt(encryptedText, KeyType.PrivateKey);
    }
}
